package com.coder.rental.utils;

import com.coder.rental.entity.Permission;
import com.coder.rental.vo.RouteVO;

import java.util.ArrayList;
import java.util.List;
import java.util.Optional;

public class RouteTreeUtils {
    /**
     * 基于权限列表和父权限ID构建路由树。
     *
     * @param permissionList 权限列表，包含所有路由的权限信息。
     * @param pid 父权限ID，用于筛选特定父级下的路由。
     * @return 返回一个路由树的列表，每个路由包含路径、名称、组件等信息，以及可能的子路由。
     */
    public static List<RouteVO> buildRouteTree(List<Permission> permissionList,int pid){
        List<RouteVO> routeVOList=new ArrayList<>();
        Optional.ofNullable(permissionList).orElse(new ArrayList<>())
                .stream()
                .filter(permission -> permission!=null && permission.getPid()==pid)
                .forEach(permission -> {
                    RouteVO routeVO=new RouteVO();
                    routeVO.setPath(permission.getRoutePath());//获取路由路径
                    routeVO.setName(permission.getRouteName());//获取路由名称
                    //是根路径菜单
                    if (permission.getPid()==0){
                        routeVO.setComponent("Layout");
                        routeVO.setAlwaysShow(true);
                    }else {
                        routeVO.setComponent(permission.getRouteUrl());
                        routeVO.setAlwaysShow(false);
                    }
                    routeVO.setMeta(routeVO.new Meta(permission.getPermissionLable()
                            ,permission.getIcon(),permission.getPermissionCode().split(",")));
                    routeVO.setChildren(buildRouteTree(permissionList,permission.getId()));
                    routeVOList.add(routeVO);
                });

        return routeVOList;

    }

}
